#创建 build/ 目录
# 把 keyirq.c 和一个极简 Makefile（只含 obj-m := keyirq.o）复制进去
# 调用内核 make：M=$(PWD)/build
# 内核在 build/ 目录下生成所有中间文件和 .ko
# 把 build/keyirq.ko 复制回当前目录

# 指定架构
ARCH := arm64

# 指定内核源码路径
KERNEL_DIR := /home/alientek/rk3588_linux_sdk/kernel

# 驱动名称
MOD_NAME := noblockio

# 构建目录
BUILD_DIR := build

# 交叉编译工具链
CROSS_COMPILE ?= aarch64-buildroot-linux-gnu-

# 当前目录
PWD := $(shell pwd)

# 默认目标
all: $(MOD_NAME).ko

# 生成 .ko：先在 build/ 中编译，再复制出来
$(MOD_NAME).ko: prepare-build-dir copy-src-to-build
	$(MAKE) -C $(KERNEL_DIR) \
		M=$(PWD)/$(BUILD_DIR) \
		ARCH=$(ARCH) \
		CROSS_COMPILE=$(CROSS_COMPILE) \
		modules
	cp $(BUILD_DIR)/$(MOD_NAME).ko ./

# 创建 build 目录
prepare-build-dir:
	mkdir -p $(BUILD_DIR)

# 将当前目录的 .c 和 Makefile（模块构建所需）复制到 build/
copy-src-to-build: prepare-build-dir
	cp $(MOD_NAME).c $(BUILD_DIR)/
	# 为 build 目录生成一个极简的 Makefile
	echo "obj-m := $(MOD_NAME).o" > $(BUILD_DIR)/Makefile

# 清理：删除 build/ 和当前目录的 .ko
clean:
	rm -rf $(BUILD_DIR)
	rm -f $(MOD_NAME).ko

# 帮助信息
help:
	@echo "Usage:"
	@echo "  make                    - 编译驱动，生成 keyirq.ko"
	@echo "  make clean             - 清理 build/ 和 .ko"

